/*
 * Project: Sudoku Explainer
 * Copyright (C) 2006-2007 Nicolas Juillerat
 * 
 * Project: Sudoku Hint Engine for Android
 * Copyright (C) 2010-2013 Emanuel Moecklin
 * 
 * Available under the terms of the Lesser General Public License (LGPL)
 */
package com.onegravity.sudoku.solver;

import java.io.Serializable;

public class SolvingTechniquesConfig implements Serializable {
	private static final long serialVersionUID = -4390154129934941013L;

	private boolean mUseFullHouse = true;
	private boolean mUseHiddenSingle = true;
	private boolean mUseHiddenPair = true;
	private boolean mUseHiddenTriple = true;
	private boolean mUseHiddenQuad = true;
	private boolean mUseNakedSingle = true;
	private boolean mUseNakedPair = true;
	private boolean mUseNakedTriple = true;
	private boolean mUseNakedQuad = true;
	private boolean mUseLockedCandidates = true;
	private boolean mUseXWing = true;
	private boolean mUseFinnedXWing = true;
	private boolean mUseSwordfish = true;
	private boolean mUseFinnedSwordfish = true;
	private boolean mUseJellyfish = true;
	private boolean mUseFinnedJellyfish = true;
	private boolean mUseWWing = true;
	private boolean mUseXYWing = true;
	private boolean mUseXYZWing = true;
	private boolean mUseWXYZWing = true;
	private boolean mUseVWXYZWing = true;
	private boolean mUseUVWXYZWing = true;
	private boolean mUseTUVWXYZWing = true;
	private boolean mUseSTUVWXYZWing = true;
	private boolean mUseRSTUVWXYZWing = true;
	private boolean mUseALCPairs = true;
	private boolean mUseALCTriple = true;
	private boolean mUseALCQuad = true;
	private boolean mUseSueDeCoq = true;
	private boolean mUseBUG = true;
	private boolean mUseUniquenessTest = true;
	private boolean mUseHiddenUniqueRectangle = true;
	private boolean mUseAvoidableRectangle = true;
	private boolean mUseAlignedPairExclusion = true;
	private boolean mUseAlignedTripleExclusion = true;
	private boolean mUseALSXZ = true;
	private boolean mUseALSXYWing = true;
	private boolean mUseXForcingChains = true;
	private boolean mUseXYForcingChains = true;
	private boolean mUseForcingChains = true;
	private boolean mUseCycles = true;
	private boolean mUseNishioForcingChains = true;
	private boolean mUseRegionForcingChains = true;
	private boolean mUseCellForcingChains = true;
	private boolean mUseContradictionForcingChains = true;
	private boolean mUseDoubleForcingChains = true;
	
	/**
	 * The default constructor is used to get a config with all solving techniques enabled
	 */
	public SolvingTechniquesConfig() {}

	/**
	 * This constructor is used to create a custom config object.
	 */
	public SolvingTechniquesConfig(boolean useFullHouse,
								   boolean useHiddenSingle, boolean useHiddenPair, boolean useHiddenTriple, boolean useHiddenQuad,
								   boolean useNakedSingle, boolean useNakedPair, boolean useNakedTriple, boolean useNakedQuad,
								   boolean useLockedCandidates,
								   boolean useXWing, boolean useFinnedXWing,
								   boolean useSwordfish, boolean useFinnedSwordfish,
								   boolean useJellyfish, boolean useFinnedJellyfish,
								   boolean useWWing, boolean useXYWing, boolean useXYZWing, boolean useWXYZWing, boolean useVWXYZWing,
								   boolean useUVWXYZWing, boolean useTUVWXYZWing, boolean useSTUVWXYZWing, boolean useRSTUVWXYZWing,
								   boolean useALCPairs, boolean useALCTriple, boolean useALCQuad,
								   boolean useSueDeCoq,
								   boolean useBUG,
								   boolean useUniquenessTest,
								   boolean useHiddenUniqueRectangle,
								   boolean useAvoidableRectangle,
								   boolean useAlignedPairExclusion, boolean useAlignedTripleExclusion,
								   boolean useALSXZ, boolean useALSXYWing,
								   boolean useXForcingChains,
								   boolean useXYForcingChains,
								   boolean useForcingChains,
								   boolean useCycles,
								   boolean useNishioForcingChains,
								   boolean useRegionForcingChains,
								   boolean useCellForcingChains,
								   boolean useContradictionForcingChains,
								   boolean useDoubleForcingChains) {
		mUseFullHouse = useFullHouse;
		mUseHiddenSingle = useHiddenSingle;
		mUseHiddenPair = useHiddenPair;
		mUseHiddenTriple = useHiddenTriple;
		mUseHiddenQuad = useHiddenQuad;
		mUseNakedSingle = useNakedSingle;
		mUseNakedPair = useNakedPair;
		mUseNakedTriple = useNakedTriple;
		mUseNakedQuad = useNakedQuad;
		mUseLockedCandidates = useLockedCandidates;
		mUseXWing = useXWing;
		mUseFinnedXWing = useFinnedXWing;
		mUseSwordfish = useSwordfish;
		mUseFinnedSwordfish = useFinnedSwordfish;
		mUseJellyfish = useJellyfish;
		mUseFinnedJellyfish = useFinnedJellyfish;
		mUseWWing = useWWing;
		mUseXYWing = useXYWing;
		mUseXYZWing = useXYZWing;
		mUseWXYZWing = useWXYZWing;
		mUseVWXYZWing = useVWXYZWing;
		mUseUVWXYZWing = useUVWXYZWing;
		mUseTUVWXYZWing = useTUVWXYZWing;
		mUseSTUVWXYZWing = useSTUVWXYZWing;
		mUseRSTUVWXYZWing = useRSTUVWXYZWing;
		mUseALCPairs = useALCPairs;
		mUseALCTriple = useALCTriple;
		mUseALCQuad = useALCQuad;
		mUseSueDeCoq = useSueDeCoq;
		mUseBUG = useBUG;
		mUseUniquenessTest = useUniquenessTest;
		mUseHiddenUniqueRectangle = useHiddenUniqueRectangle;
		mUseAvoidableRectangle = useAvoidableRectangle;
		mUseAlignedPairExclusion = useAlignedPairExclusion;
		mUseAlignedTripleExclusion = useAlignedTripleExclusion;
		mUseALSXZ = useALSXZ;
		mUseALSXYWing = useALSXYWing;
		mUseXForcingChains = useXForcingChains;
		mUseXYForcingChains = useXYForcingChains;
		mUseForcingChains = useForcingChains;
		mUseCycles = useCycles;
		mUseNishioForcingChains = useNishioForcingChains;
		mUseRegionForcingChains = useRegionForcingChains;
		mUseCellForcingChains = useCellForcingChains;
		mUseContradictionForcingChains = useContradictionForcingChains;
		mUseDoubleForcingChains = useDoubleForcingChains;
	}
	
	public boolean useFullHouse() {
		return mUseFullHouse;
	}
	public boolean useHiddenSingle() {
		return mUseHiddenSingle;
	}
	public boolean useHiddenPair() {
		return mUseHiddenPair;
	}
	public boolean useHiddenTriple() {
		return mUseHiddenTriple;
	}
	public boolean useHiddenQuad() {
		return mUseHiddenQuad;
	}
	public boolean useNakedSingle() {
		return mUseNakedSingle;
	}
	public boolean useNakedPair() {
		return mUseNakedPair;
	}
	public boolean useNakedTriple() {
		return mUseNakedTriple;
	}
	public boolean useNakedQuad() {
		return mUseNakedQuad;
	}
	public boolean useLockedCandidates() {
		return mUseLockedCandidates;
	}
	public boolean useXWing() {
		return mUseXWing;
	}
	public boolean useFinnedXWing() {
		return mUseFinnedXWing;
	}
	public boolean useSwordfish() {
		return mUseSwordfish;
	}
	public boolean useFinnedSwordfish() {
		return mUseFinnedSwordfish;
	}
	public boolean useJellyfish() {
		return mUseJellyfish;
	}
	public boolean useFinnedJellyfish() {
		return mUseFinnedJellyfish;
	}
	public boolean useWWing() {
		return mUseWWing;
	}
	public boolean useXYWing() {
		return mUseXYWing;
	}
	public boolean useXYZWing() {
		return mUseXYZWing;
	}
	public boolean useWXYZWing() {
		return mUseWXYZWing;
	}
	public boolean useVWXYZWing() {
		return mUseVWXYZWing;
	}
	public boolean useUVWXYZWing() {
		return mUseUVWXYZWing;
	}
	public boolean useTUVWXYZWing() {
		return mUseTUVWXYZWing;
	}
	public boolean useSTUVWXYZWing() {
		return mUseSTUVWXYZWing;
	}
	public boolean useRSTUVWXYZWing() {
		return mUseRSTUVWXYZWing;
	}
	public boolean useALCPairs() {
		return mUseALCPairs;
	}
	public boolean useALCTriple() {
		return mUseALCTriple;
	}
	public boolean useALCQuad() {
		return mUseALCQuad;
	}
	public boolean useSueDeCoq() {
		return mUseSueDeCoq;
	}
	public boolean useBUG() {
		return mUseBUG;
	}
	public boolean useUniquenessTest() {
		return mUseUniquenessTest;
	}
	public boolean useHiddenUniqueRectangle() {
		return mUseHiddenUniqueRectangle;
	}
	public boolean useAvoidableRectangle() {
		return mUseAvoidableRectangle;
	}
	public boolean useAlignedPairExclusion() {
		return mUseAlignedPairExclusion;
	}
	public boolean useAlignedTripleExclusion() {
		return mUseAlignedTripleExclusion;
	}
	public boolean useALSXZ() {
		return mUseALSXZ;
	}
	public boolean useALSXYWing() {
		return mUseALSXYWing;
	}
	public boolean useXForcingChains() {
		return mUseXForcingChains;
	}
	public boolean useXYForcingChains() {
		return mUseXYForcingChains;
	}
	public boolean useForcingChains() {
		return mUseForcingChains;
	}
	public boolean useCycles() {
		return mUseCycles;
	}
	public boolean useNishioForcingChains() {
		return mUseNishioForcingChains;
	}
	public boolean useRegionForcingChains() {
		return mUseRegionForcingChains;
	}
	public boolean useCellForcingChains() {
		return mUseCellForcingChains;
	}
	public boolean useContradictionForcingChains() {
		return mUseContradictionForcingChains;
	}
	public boolean useDoubleForcingChains() {
		return mUseDoubleForcingChains;
	}
	
}